import { defineStore } from 'pinia'
import { ref } from 'vue'
import { Message } from '@arco-design/web-vue'
import { roleApi } from '@/api'

/**
 * 角色管理Store
 */
export const useRoleStore = defineStore('role', () => {
  // 状态
  const loading = ref(false)
  const roles = ref([])
  const currentRole = ref(null)

  /**
   * 获取角色列表
   * @returns {Promise} 角色列表
   */
  async function getRoleList() {
    loading.value = true;
    try {
      const response = await roleApi.getRoleList();
      
      if (response.code === 0) {
        roles.value = response.data.list || [];
        return roles.value;
      }
      
      console.error('获取角色列表失败:', response.message || '未知错误');
      return [];
    } catch (error) {
      console.error('获取角色列表失败:', error.message || '未知错误');
      return [];
    } finally {
      loading.value = false;
    }
  }

  /**
   * 创建角色
   * @param {Object} roleData - 角色数据
   * @param {Boolean} showMessage - 是否显示成功提示，默认为true
   * @returns {Promise<boolean>} 是否成功
   */
  async function createRole(roleData, showMessage = true) {
    loading.value = true;
    try {
      const response = await roleApi.createRole(roleData);
      
      if (response.code === 0) {
        if (showMessage) {
          Message.success('创建角色成功');
        }
        return true;
      }
      
      Message.error(response.message || '创建角色失败');
      return false;
    } catch (error) {
      Message.error('创建角色失败: ' + (error.message || '未知错误'));
      return false;
    } finally {
      loading.value = false;
    }
  }

  /**
   * 更新角色
   * @param {Number} id - 角色ID
   * @param {Object} roleData - 角色数据
   * @param {Boolean} showMessage - 是否显示成功提示，默认为true
   * @returns {Promise<boolean>} 是否成功
   */
  async function updateRole(id, roleData, showMessage = true) {
    loading.value = true;
    try {
      const response = await roleApi.updateRole(id, roleData);
      
      if (response.code === 0) {
        if (showMessage) {
          Message.success('更新角色成功');
        }
        return true;
      }
      
      Message.error(response.message || '更新角色失败');
      return false;
    } catch (error) {
      Message.error('更新角色失败: ' + (error.message || '未知错误'));
      return false;
    } finally {
      loading.value = false;
    }
  }

  /**
   * 删除角色
   * @param {Number} id - 角色ID
   * @returns {Promise<boolean>} 是否成功
   */
  async function deleteRole(id) {
    loading.value = true;
    try {
      const response = await roleApi.deleteRole(id);
      
      if (response.code === 0) {
        // 如果删除的是当前选中的角色，清除选中
        if (currentRole.value && currentRole.value.id === id) {
          currentRole.value = null;
        }
        
        Message.success('删除角色成功');
        return true;
      }
      
      Message.error(response.message || '删除角色失败');
      return false;
    } catch (error) {
      Message.error('删除角色失败: ' + (error.message || '未知错误'));
      return false;
    } finally {
      loading.value = false;
    }
  }

  /**
   * 设置当前角色
   * @param {Object} role - 角色对象
   */
  function setCurrentRole(role) {
    currentRole.value = role;
  }

  /**
   * 获取角色详情
   * @param {Number} id - 角色ID
   * @returns {Promise<Object>} 角色详情，包括权限列表
   */
  async function getRoleDetail(id) {
    if (!id) {
      console.error('获取角色详情需要提供角色ID');
      return null;
    }
    
    loading.value = true;
    
    try {
      console.log(`获取角色ID ${id} 的详情信息...`);
      
      const res = await roleApi.getRoleDetail(id);
      
      if (res.code === 200 || res.code === 0) {
        console.log(`成功获取角色 ${id} 的详情:`, res.data);
        return res;
      } else {
        console.error('获取角色详情失败:', res.message || res.msg);
        return null;
      }
    } catch (error) {
      console.error(`获取角色 ${id} 详情失败:`, error);
      return null;
    } finally {
      loading.value = false;
    }
  }

  return {
    loading,
    roles,
    currentRole,
    getRoleList,
    createRole,
    updateRole,
    deleteRole,
    setCurrentRole,
    getRoleDetail
  }
}) 